<?php
// +----------------------------------------------------------------------
// | YotakuCMS
// +----------------------------------------------------------------------
// | Copyright (c) 2016 http://www.yotaku.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: Creatint <creatint@163.com> 
// +----------------------------------------------------------------------

namespace Home\Controller;

/**
 * 文档模型控制器
 * 文档模型列表和详情
 */
class ArticleController extends HomeController {

     /* 文档模型频道页 */
     public function index(){
          /* 分类信息 */
          $category = $this->category();

          // 子导航
          $this->nav();

          //频道页只显示模板，默认不读取任何内容
          //内容可以通过模板标签自行定制

          /* 模板赋值并渲染模板 */
          $this->assign('category', $category);
          $this->display($category['template_index']);
     }

     /* 文档模型列表页 */
     public function lists($p = 1){
          /* 分类信息 */
          $category = $this->category();

          /* 获取当前分类列表 */
          $Document = D('Document');
          $list = $Document->page($p, $category['list_row'])->lists($category['id']);
          if(false === $list){
               $this->error('获取列表数据失败！');
          }

          /* 模板赋值并渲染模板 */
          $this->assign('category', $category);
          $this->assign('list', $list);
          $this->display($category['template_lists']);
     }

     /* 文档模型详情页 */
     public function detail($id = 0, $p = 1){
          /* 标识正确性检测 */
          if(!($id && is_numeric($id))){
               $this->error('文档ID错误！');
          }

          /* 页码检测 */
          $p = intval($p);
          $p = empty($p) ? 1 : $p;

          /* 获取详细信息 */
          $Document = D('Document');
          $info = $Document->detail($id);
//		dump($info);
          if(!$info){
               $this->error($Document->getError());
          }

          /* 分类信息 */
          $category = $this->category($info['category_id']);
          trace($category, '分类');

          /* 获取模板 */
          if(!empty($info['template'])){//已定制模板
               $tmpl = $info['template'];
          } elseif (!empty($category['template_detail'])){ //分类已定制模板
               $tmpl = $category['template_detail'];
          } else { //使用默认模板
               $tmpl = 'Article/'. get_document_model($info['model_id'],'name') .'/detail';
          }

          // 子导航
          $this->nav($category['id']);

          /* 更新浏览数 */
          $map = array('id' => $id);
          $Document->where($map)->setInc('view');

          /* 模板赋值并渲染模板 */
          $this->assign('category', $category);
          $this->assign('info', $info);
          $this->assign('page', $p); //页码
          $this->display($tmpl);
     }

     /* 文档分类检测 */
     private function category($id = 0){
          /* 标识正确性检测 */
          $id = $id ? $id : I('get.category', 0);
          if(empty($id)){
               $this->error('没有指定文档分类！');
          }

          /* 获取分类信息 */
          $category = D('Category')->info($id);
          if($category && 1 == $category['status']){
               switch ($category['display']) {
                    case 0:
                         $this->error('该分类禁止显示！');
                         break;
                    //TODO: 更多分类显示状态判断
                    default:
                         return $category;
               }
          } else {
               $this->error('分类不存在或被禁用！');
          }
     }

     public function nav($category_id = null){

          // 获取分类导航
          $url = preg_replace('/^s=\/([a-zA-Z0-9]*\/[a-zA-Z0-9]*\/[a-zA-Z0-9_]*\/[a-zA-Z0-9_]*)(.*).html(.*)?$/', '$1', $_SERVER['QUERY_STRING']);
          trace($url, '当前导航URL');
          $current_nav = D('Channel')->where(['url'=>$url])->order('id desc')->find();
          if (!$current_nav) {
               // 自己构造导航URL
               $url = 'Article/index/category/'.$category_id;
               $current_nav = D('Channel')->where(['url'=>$url])->order('id desc')->find();
          }



          if ($current_nav['pid'] == 0) {
               // 子导航
               $navs = D('Channel')->where(['pid'=>$current_nav['id']])->order('sort asc')->select();
          } else {
               // 同级导航
               $navs = D('Channel')->where(['pid'=>$current_nav['pid']])->order('sort asc')->select();
          }

//        dump($navs);
          $this->assign('navs', $navs);
          $this->assign('current_nav', $current_nav);
     }
}
